package transporter

import (
	"github.com/hyperway/pkg/component"
	"github.com/hyperway/pkg/constant"
	"io/ioutil"
)

//func GetDubboValue(ctx component.WebContext, argument component.ServiceArgument) (interface{}, error) {
//	v := GetWebValue(ctx, argument)
//	if helper.IsNil(v) && argument.DefaultValue != "" {
//		v = argument.DefaultValue
//	}
//	return dubbot.Encoder4Ctx(argument.ClassType, v)
//}

func GetWebValue(ctx component.WebContext, argument component.ServiceArgument) interface{} {
	switch argument.HttpScope {
	case constant.Query:
		return ctx.QueryParam(argument.HttpName)
	case constant.Path:
		return ctx.PathValue(argument.HttpName)
	case constant.Form:
		return ctx.FormValue(argument.HttpName)
	case constant.Header:
		return ctx.Header(argument.HttpName)
	case constant.Body:
		reader, err := ctx.Body()
		if err != nil {
			return nil
		}
		data, err := ioutil.ReadAll(reader)
		if err != nil {
			return nil
		}
		// TODO 这里默认返回了字符串，在encoder.go中的Encoder中List和Map都通过default处理
		return string(data)
	}
	return nil
}
